#include "EventLoop.hpp"
#include "ServerCalculator.hpp"

ServerCalculator scl;

// 为了测试，加工数据，处理过程会调用自己编写的对应协议和处理
void DefaultDataProcessing(std::weak_ptr<Connection> con)
{
    // 如果weak_ptr指向的shared_ptr过期了，则无法进行后续操作，否则获取该shared_ptr
    if (con.expired())
        return;
    auto conne = con.lock();
    std::string &package = conne->GetInbuffer(); // 获取输入缓冲区的数据
    std::string res = scl.Calculate(package);    // 交由对应的处理函数对数据进行加工
    if (res.empty())                             // 加工失败，返回
        return;
    conne->AppendOutbuffer(res);                         // 加工成功，数据需要发出，将该数据拷贝到输出缓冲区中
    auto event_loop_ptr = conne->_event_loop_ptr.lock(); // 回调，调用发送数据的函数
    event_loop_ptr->Sender(conne);
}

int main()
{
    std::shared_ptr<EventLoop> epsvr(new EventLoop(DefaultDataProcessing)); // 此处需使用shared_ptr而不能使用unique_ptr，否则在EventLoop.hpp中的AddConnection为监听套接字设置SetHandler会出错
    epsvr->Initial();
    epsvr->Loop();

    return 0;
}